package cn.stimd.spring.beans.factory;

/**
 * 在BeanFactory引导过程中，单例Bean预实例化（即调用preInstantiateSingletons方法）结束之后的回调接口。
 * 单例Bean可以实现该接口，在常规的单例Bean实例化结束之后进行一些操作，避免在此之前某些无意的（accidental early）初始化行为带来的副作用。
 * <p>
 * 某种意义上，这也是构造结束后立即初始化Bean的一种替代方法。该回调类似ContextRefreshedEvent，但不需要实现监听器
 * 如果启动、管理异步任务，Lifecycle接口是更好的选择，提供了更丰富的操作
 * <p>
 * Created by Stimd
 * 项目地址：https://gitee.com/stimd/spring-wheel
 * 公众号：Java编程探微
 */
public interface SmartInitializingSingleton {

    /**
     * 在preInstantiateSingletons方法执行后回调，此时所有的单例Bean都已经实例化，
     * 调用getBeansOfType等方法不会产生副作用（懒加载的单例Bean和非单例作用域的Bean不受影响）
     */
    void afterSingletonsInstantiated();
}
